home *** CD-ROM | disk | FTP | other *** search
- #include <limits.h>
-
- #include "DeskLib:WimpSWIs.h"
- #include "DeskLib:Coord.h"
-
- #include "Shell.Shell.h"
- #include "Shell.Check.h"
-
-
-
-
-
- BOOL Shell_CheckWindowSizeScroll( window_handle w, const wimp_rect *rect, BOOL bottomscroll)
- /* Expands the window to contain the workarea rect if needed. */
- /* Returns TRUE if rect is visible. */
- /* If bottomscroll is TRUE, the window is scrolled down if already */
- /* at bottom of workarea. */
- {
- window_info info;
- BOOL changedsize = FALSE, movescroll = FALSE;
-
- info.window = w;
- Wimp_GetWindowInfo( &info);
-
- if (bottomscroll) {
- if ( info.block.scroll.y <=
- info.block.workarearect.min.y +
- (info.block.screenrect.max.y - info.block.screenrect.min.y)
- ) movescroll = TRUE;
- }
-
- if ( rect->min.x-4 < info.block.workarearect.min.x) {
- info.block.workarearect.min.x = rect->min.x-4;
- changedsize = TRUE;
- }
- if ( rect->min.y-4 < info.block.workarearect.min.y) {
- info.block.workarearect.min.y = rect->min.y-4;
- changedsize = TRUE;
- }
- if ( rect->max.x > info.block.workarearect.max.x) {
- info.block.workarearect.max.x = rect->max.x;
- changedsize = TRUE;
- }
- if ( rect->max.y > info.block.workarearect.max.y) {
- info.block.workarearect.max.y = rect->max.y;
- changedsize = TRUE;
- }
-
- if ( changedsize) Wimp_SetExtent( w, &info.block.workarearect);
-
- if ( bottomscroll && movescroll) {
- window_state state;
- Wimp_GetWindowState( w, &state);
- state.openblock.scroll.y = INT_MIN;
- Wimp_OpenWindow( (window_openblock *) &state.openblock);
- /* still need to redraw if window is scrolled */
- }
-
- Coord_RectToWorkArea( &info.block.screenrect, (convert_block *) &info.block);
- return Coord_RectsOverlap( (wimp_rect *) rect, &info.block.screenrect);
- }
-
-
- /*
- The following define is in "Shell.Check.h"
- #define Shell_CheckWindowSize( w, r) Shell_CheckWindowSizeScroll( w, r, FALSE)
- */
-
-
-
- void Shell_CheckWindSizeAndRedraw( window_handle window, const wimp_rect *rect)
- {
- if ( Shell_CheckWindowSize( window, rect)) {
- window_redrawblock block;
- block.window = window;
- block.rect = *rect;
- Wimp_ForceRedraw( &block);
- }
- return;
- }
-
-
-
-
- void Shell_CheckWindSizeAndRedrawAndScroll( window_handle window, const wimp_rect *rect)
- {
- if ( Shell_CheckWindowSizeScroll( window, rect, /* bottom scroll */ TRUE)) {
- window_redrawblock block;
- block.window = window;
- block.rect = *rect;
- Wimp_ForceRedraw( &block);
- }
- return;
- }
-
-
-
- void Shell_CheckWindSizeAndRedrawSlow( Shell_rectblock *r)
- {
- if ( Shell_CheckWindowSize( r->window, &r->icon.workarearect)) Shell_ForceRectRedrawSlow( r);
- }
-